﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Windows.Forms;
using System.Globalization;
using LarDosIdosos.Business.Model;
using LarDosIdosos.DataSources;

namespace LarDosIdosos
{
    public partial class WebUserControlResponsavel : System.Web.UI.UserControl
    {
        protected void Page_Load(object sender, EventArgs e)
        {

        }

        public void CarregaTelaDeCadastro()
        {
            try
            {
                hiddenFieldCodigoResponsavel.Value = "";
                textNomeDoResponsavel.Text = "";
                dropDownListEstadoCivil.ClearSelection();
                textCpfDoResponsavel.Text = "";
                textDataDeNascimento.Text = "";
                TextBoxNomeDoPai.Text = "";
                TextBoxNomeDaMae.Text = "";
                HabilitaDesabilitaControls(true);
                CarregaIdosos(false);
            }
            catch (Exception ex)
            {
                throw new Exception("Erro na visualização do responsável.", ex);
            }
        }

        public void CarregaVisualizacaoDetalhada(Business.Model.Responsavel responsavel, bool habilita)
        {
            try
            {
                divPrintJs.Visible = !habilita;
                hiddenFieldCodigoResponsavel.Value = responsavel.Codigo_Responsavel.ToString();
                textNomeDoResponsavel.Text = responsavel.Nome_Responsavel;
                dropDownListEstadoCivil.SelectedValue = responsavel.Estado_Civil.Codigo_Estado_Civil.ToString();
                textCpfDoResponsavel.Text = responsavel.CPF_Responsavel;
                textRgDoResponsavel.Text = responsavel.RG_Responsavel;

                if (habilita)
                {
                    repeaterTelefones.DataSource = responsavel.Telefones_Responsavel;
                    repeaterTelefones.DataBind();
                    repeaterTelefonesVisualizacao.Visible = false;
                    repeaterTelefones.Visible = true;
                    trAddTelefone.Visible = true;
                }
                else
                {
                    repeaterTelefonesVisualizacao.DataSource = responsavel.Telefones_Responsavel;
                    repeaterTelefonesVisualizacao.DataBind();
                    repeaterTelefonesVisualizacao.Visible = true;
                    repeaterTelefones.Visible = false;
                    trAddTelefone.Visible = false;
                }

                textDataDeNascimento.Text = responsavel.Data_de_Nascimento_Responsavel.ToString("dd/MM/yyyy");
                TextBoxNomeDoPai.Text = responsavel.Nome_do_Pai_Responsavel;
                TextBoxNomeDaMae.Text = responsavel.Nome_da_Mae_Responsavel;
                HabilitaDesabilitaControls(habilita);
                CarregaIdosos(true);
            }
            catch (Exception ex)
            {
                throw new Exception("Erro na visualização do responsável.", ex);
            }
        }
        private void HabilitaDesabilitaControls(bool enabled)
        {
            textNomeDoResponsavel.Enabled = enabled;
            dropDownListEstadoCivil.Enabled = enabled;
            textCpfDoResponsavel.Enabled = enabled;
            textRgDoResponsavel.Enabled = enabled;
            textDataDeNascimento.Enabled = enabled;
            TextBoxNomeDoPai.Enabled = enabled;
            TextBoxNomeDaMae.Enabled = enabled;

            BotaoSalvarAlteracoes(enabled);
        }

        private void BotaoSalvarAlteracoes(bool enabled)
        {
            buttonSalvar.Visible = enabled;
        }

        protected void buttonSalvar_Onclick(object sender, EventArgs e)
        {
            try
            {
                if (!string.IsNullOrEmpty(hiddenFieldCodigoResponsavel.Value))
                {
                    ArmazenaResponsavelAlteracao();
                }
                else
                {
                    ArmazenaResponsavelCadastro();
//                    Voltar();
                }
            }
            catch (Exception ex)
            {

            }
        }

        private void ArmazenaResponsavelAlteracao()
        {
            int total;
            string resultado = "";
            try
            {
                Business.Model.Responsavel responsavel = new Business.Model.Responsavel();
                responsavel.Codigo_Responsavel = Convert.ToInt32(hiddenFieldCodigoResponsavel.Value);
                responsavel.Nome_Responsavel = textNomeDoResponsavel.Text;
                responsavel.Estado_Civil = ObtemEstadoCivil(Convert.ToInt32(dropDownListEstadoCivil.SelectedValue));
                responsavel.CPF_Responsavel = Util.CPF.ValidaCPF(textCpfDoResponsavel.Text);
                responsavel.RG_Responsavel = textRgDoResponsavel.Text;

                responsavel.Telefones_Responsavel = CriaListaDeTelefonePeloRepeater(repeaterTelefones);

                responsavel.Data_de_Nascimento_Responsavel = Convert.ToDateTime(textDataDeNascimento.Text, new CultureInfo("pt-BR"));
                responsavel.Nome_do_Pai_Responsavel = TextBoxNomeDoPai.Text;
                responsavel.Nome_da_Mae_Responsavel = TextBoxNomeDaMae.Text;

                DataSourceResponsavel dataSourceResponsavel = new DataSourceResponsavel();
                total = dataSourceResponsavel.UpdateResponsavel(responsavel);
                
                dataSourceResponsavel.InsertTelefone(responsavel);

                FinalizaCadastroComSucesso(total + " Responsavel foi atualizado com sucesso.");
            }
            catch (Exception ex)
            {
                FinalizaCadastroComErro(ex.Message);
            }
        }

        private Business.Model.EstadoCivil ObtemEstadoCivil(int CodigoEstadoCivil)
        {
            DataSourceEstadoCivil dataSourceEstadoCivil = new DataSourceEstadoCivil();
            return dataSourceEstadoCivil.BuscaEstadoCivil(CodigoEstadoCivil);
        }

        private void ArmazenaResponsavelCadastro()
        {
            try
            {
                Business.Model.Responsavel responsavel = new Business.Model.Responsavel();
                responsavel.Nome_Responsavel = textNomeDoResponsavel.Text;
                responsavel.Estado_Civil = ObtemEstadoCivil(Convert.ToInt32(dropDownListEstadoCivil.SelectedValue));
                responsavel.CPF_Responsavel = Util.CPF.ValidaCPF(textCpfDoResponsavel.Text);
                responsavel.RG_Responsavel = textRgDoResponsavel.Text;

                responsavel.Telefones_Responsavel = CriaListaDeTelefonePeloRepeater(repeaterTelefones);

                responsavel.Data_de_Nascimento_Responsavel = Convert.ToDateTime(textDataDeNascimento.Text, new CultureInfo("pt-BR"));
                responsavel.Nome_do_Pai_Responsavel = TextBoxNomeDoPai.Text;
                responsavel.Nome_da_Mae_Responsavel = TextBoxNomeDaMae.Text;

                DataSourceResponsavel dataSourceResponsavel = new DataSourceResponsavel();
                int total = dataSourceResponsavel.InsertResponsavel(responsavel);

                responsavel.Codigo_Responsavel = dataSourceResponsavel.BuscaResponsavelPeloCPF(responsavel.CPF_Responsavel).Codigo_Responsavel;

                if(responsavel.Codigo_Responsavel != 0)
                {
                    dataSourceResponsavel.InsertTelefone(responsavel);
                }

                FinalizaCadastroComSucesso(total + " Responsavel foi cadastrado com sucesso.");
            }
            catch (Exception ex)
            {
                FinalizaCadastroComErro(ex.Message);
            }
        }

        private void FinalizaCadastroComSucesso(string mensagem)
        {
//            MessageBox.Show(mensagem, "Sucesso", MessageBoxButtons.OK,
//                               MessageBoxIcon.None, MessageBoxDefaultButton.Button1,
//                               MessageBoxOptions.ServiceNotification, false);
			labelFeedback.Text="Salvo com Sucesso!";
			labelFeedback.Attributes.Add("Style","color:#00FF00");
        }

        private void FinalizaCadastroComErro(string mensagem)
        {
//            MessageBox.Show(mensagem, "Erro", MessageBoxButtons.OK,
//                               MessageBoxIcon.Error, MessageBoxDefaultButton.Button1,
//                               MessageBoxOptions.ServiceNotification, false);
			labelFeedback.Text="Erro! <br/>"+mensagem;
			labelFeedback.Attributes.Add("Style","color:#FF0000");
        }

        public void Voltar()
        {
            hiddenFieldCodigoResponsavel.Value = "";
            textNomeDoResponsavel.Text = "";
            dropDownListEstadoCivil.ClearSelection();
            textCpfDoResponsavel.Text = "";
            textRgDoResponsavel.Text = "";
            textDataDeNascimento.Text = "";
            TextBoxNomeDoPai.Text = "";
            TextBoxNomeDaMae.Text = "";
        }

        private void CarregaIdosos(bool exibe)
        {
            trIdosos.Visible = exibe;
            if(exibe)
            {
                DataSources.DataSourceResponsavel dataSourceResponsavel = new DataSourceResponsavel();
                List<Business.Model.Idoso> idosos = dataSourceResponsavel.BuscaIdososDoResponsavel(Convert.ToInt32(hiddenFieldCodigoResponsavel.Value));
                gridViewIdosos.DataSource = idosos;
                gridViewIdosos.DataBind();
            }
        }

        protected void repeaterTelefones_ItemCommand(object source, RepeaterCommandEventArgs e)
        {
            switch (e.CommandName)
            {
                case "deletar":
                    List<Telefone> telefones = CriaListaDeTelefonePeloRepeater(repeaterTelefones);

                    HiddenField hiddenField = (HiddenField)e.Item.FindControl("hiddenFieldCodigoTelefone");
                    Literal literal = (Literal)e.Item.FindControl("literalNumero");

                    Telefone telefone = new Telefone();
                    telefone.Codigo_Telefone = Convert.ToInt32(hiddenField.Value);
                    telefone.Numero_Telefone = literal.Text;

                    IEnumerable<Telefone> enumerable = from tel in telefones
                                                       where
                                                           !(tel.Codigo_Telefone == telefone.Codigo_Telefone &&
                                                           tel.Numero_Telefone == telefone.Numero_Telefone)
                                                       select tel;

                    repeaterTelefones.DataSource = enumerable.ToList();
                    repeaterTelefones.DataBind();
                    break;

            }
        }

        protected void buttonAddTelefone_Click(object sender, EventArgs e)
        {
            List<Telefone> telefones = CriaListaDeTelefonePeloRepeater(repeaterTelefones);
            telefones.Add(new Telefone { Codigo_Telefone = 0, Numero_Telefone = textBoxAddTelefone.Text });
            repeaterTelefones.DataSource = telefones;
            repeaterTelefones.DataBind();
            textBoxAddTelefone.Text = "";
        }

        private List<Telefone> CriaListaDeTelefonePeloRepeater(Repeater repeater)
        {
            List<Telefone> telefones = new List<Telefone>();
            foreach (RepeaterItem item in repeater.Items)
            {
                try
                {
                    Telefone telefone = new Telefone();

                    HiddenField hiddenField = (HiddenField)item.FindControl("hiddenFieldCodigoTelefone");
                    Literal literal = (Literal)item.FindControl("literalNumero");


                    telefone.Codigo_Telefone = Convert.ToInt32(hiddenField.Value);

                    telefone.Numero_Telefone = literal.Text;

                    telefones.Add(telefone);
                }
                catch (Exception)
                {

                }
            }
            return telefones;
        }
    }
}